//#include "ESP01s_Control.h"

//// 接收缓冲区和状态变量
//char recv_str[MAX_STR_LEN] = {0};
//volatile uint8_t recv_idx = 0;        // 当前写入位置

///**
// * @brief  配置 USART2 的引脚
// * @param  无
// * @retval 无
// */
//void USART2_TxRx_Init(void) {
//    // 开启 GPIOA 时钟
//    RCC_APB2PeriphClockCmd(USART2_RCC, ENABLE); 

//    // 配置 PA9（USART1 TX）：说明书指定USART1输出引脚
//    GPIO_InitTypeDef GPIO_InitStruct;				// 定义结构体
//    GPIO_InitStruct.GPIO_Pin = USART2_TX_PIN; 		// 结构体引脚：9
//    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;    // 结构体模式：【复用】推挽输出模式，需要单片机而非GPIOA模块进行操作
//    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  // 结构体速度：引脚输出速度可以选择2MHz,对于串口通信的慢速率来说（115200）,2MHz足矣
//    GPIO_Init(USART2_PORT, &GPIO_InitStruct); 		// 初始化结构体

//    // 配置 PA10（USART1 RX）：说明书指定USART1输入引脚
//    GPIO_InitStruct.GPIO_Pin = USART2_RX_PIN;  		  	 // 结构体引脚：9
//    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;   // 浮空输入模式：适合具有稳定输入的引脚，此处也可替换为上拉输入
//    GPIO_Init(USART2_PORT, &GPIO_InitStruct);  			 // 初始化结构体
//}

///**
//  * @brief   初始化USAR1外设,数据位是8位,不带校验位,停止位是1位,波特率是115200
//  * @param   无
//  * @retval  无
//  */
//void USART2_Init(void) {
//    // 1.开启USART1外设时钟
//    RCC_APB2PeriphClockCmd(USART2_RCC, ENABLE);

//    // 2.利用USART_Init函数完成USART1外设的初始化
//    USART_InitTypeDef USART_InitStruct;												// 定义结构体
//    USART_InitStruct.USART_BaudRate = 115200;   									// 波特率设置为115200
//    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;    // 不使用硬件流控
//    USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    // 设置为可收可发模式
//    USART_InitStruct.USART_Parity = USART_Parity_No;    			// 不进行数据校验
//    USART_InitStruct.USART_StopBits = USART_StopBits_1;     		// 选择1位停止位
//    USART_InitStruct.USART_WordLength = USART_WordLength_8b;  	    // 数据位是8位
//    USART_Init(USART1, &USART_InitStruct);  					    // 初始化结构体

//    // 3.使能开启USART2外设
//    USART_Cmd(USART2, ENABLE);					   					// 开启USART总开关
//	
//	// 4.清理接收数据寄存器
//	USART2_ClearRDR();  
//}

//// 读取PC发送的残留数据, 清空接收数据寄存器
//void USART2_ClearRDR(void) {
//    while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET) {
//        USART_ReceiveData(USART2); // 读接收数据寄存器但不存储，丢弃数据
//    }
//}

///**
// * @brief  配置USART1外设的中断源, 以及初始化NVIC外设
// * @param  无
// * @retval 无
// * @note   
// */
//void USART2_NVIC_Init(void){
//	// 在USART初始化代码中开启中断和空闲中断
//	USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);  // 接收中断
//	
//	NVIC_EnableIRQ(USART2_IRQn);                    // 使能USART1全局中断
//	
//	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // 4位抢占优先级，无子优先级
//    
//	NVIC_InitTypeDef NVIC_InitStruct;
//    NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;
//    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 12;  // 抢占优先级
//    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;          // 子优先级
//    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
//    NVIC_Init(&NVIC_InitStruct);
//}

//// 中断函数（版本1 | 会按照字符串发走，通过测试）
//void USART2_IRQHandler(void) {
//    if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET){
//        char ch = USART_ReceiveData(USART2);
//        if(recv_idx < MAX_STR_LEN-1) { // 防止溢出
//            recv_str[recv_idx++] = ch;
//            // 检测到回车换行则标记完成
//            if(ch == '\r' || ch == '\n') {
//                recv_str[recv_idx-1] = '\0'; // 替换终止符
//                xQueueSendFromISR(xQueue, recv_str, NULL);
//                recv_idx = 0; // 重置索引
//            }
//        }
//        USART_ClearITPendingBit(USART2, USART_IT_RXNE);
//    }
//}

//// simple-edition
//void ESP01s_Control(void) {
//}

